<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.6" />
<title>Release notes for Gerrit 2.0.24, 2.0.24.1, 2.0.24.2</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

pre {
  padding: 0;
  margin: 0;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }


/*
 * xhtml11 specific
 *
 * */

tt {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

.monospaced {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}
</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>Release notes for Gerrit 2.0.24, 2.0.24.1, 2.0.24.2</h1>
<span id="revnumber">version 2.0.24 (from v2.4.2-686-gfa084bb)</span>
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>Gerrit 2.0.24 is now available in the usual location:</p></div>
<div class="paragraph"><p><a href="http://code.google.com/p/gerrit/downloads/list">http://code.google.com/p/gerrit/downloads/list</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_schema_change">Schema Change</h2>
<div class="sectionbody">
<div class="paragraph"><p><strong>WARNING: This version contains a schema change</strong> (since 2.0.21)</p></div>
<div class="paragraph"><p>Apply the database specific schema script:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>  java -jar gerrit.war --cat sql/upgrade018_019_postgres.sql | psql reviewdb
  java -jar gerrit.war --cat sql/upgrade018_019_mysql.sql    | mysql reviewdb</tt></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_ldap_change">LDAP Change</h2>
<div class="sectionbody">
<div class="paragraph"><p>LDAP groups are now bound via their full distinguished name, and not
by their common name.  Sites using LDAP groups will need to have the
site administrator visit every LDAP backed group through the web UI
(Admin &gt; Groups), search for, and select the underlying LDAP group
from the directory server.</p></div>
<div class="paragraph"><p>This change was made to remove some of the guesswork when it comes
to setting up an LDAP enabled group, as well as to permit creating
new LDAP enabled groups completely from the web UI.  It also removes
an ambiguous case when different parts of the same directory space
create identically named groups.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_new_features">New Features</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Check if the user has permission to upload changes
</p>
<div class="paragraph"><p>The new READ +2 permission is required to upload a change to a
project, while READ +1 permits read but denies uploading a change.
The schema upgrade script automatically converts READ +1 to +2.</p></div>
</li>
<li>
<p>
Use LDAP DN to match LDAP group to Gerrit group
</p>
</li>
<li>
<p>
issue 297    Allow admins to search for and bind to LDAP groups
</p>
<div class="paragraph"><p>As noted above, LDAP groups now use the full DN to match to their
Gerrit database counterpart, rather than just the common name.
Administrators may now create Gerrit groups and attach them to
any LDAP group, by performing a query on the LDAP directory for
matching groups and selecting a result.</p></div>
</li>
<li>
<p>
issue 301    Try to prevent forgotten <tt>git add</tt> during replace
</p>
<div class="paragraph"><p>Users are now stopped from performing a replace of a patch set if
they have not made a meaningful change (modify a file, or modify
the commit message).  If only the commit message was modified,
a warning is printed, but the replace still occurs.</p></div>
</li>
<li>
<p>
issue 126    Link to our issue tracker in the page footer
</p>
<div class="paragraph"><p>The footer now includes a link to the Gerrit project&#8217;s issue
tracker, so end-users can more easily report bugs or feature
requests back to the developers.</p></div>
</li>
<li>
<p>
issue 300    Support SMTP over SSL/TLS
</p>
<div class="paragraph"><p>Encrypted SMTP is now supported natively within Gerrit, see
<a href="http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html#sendemail.smtpEncryption">sendemail.smtpEncryption</a></p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_bug_fixes">Bug Fixes</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
issue 290    Fix invalid drop index in upgrade017_018_mysql
</p>
<div class="paragraph"><p>Minor syntax error in SQL script.</p></div>
</li>
<li>
<p>
Fixed ActiveDirectory LDAP group support. Allows recu&#8230;
</p>
</li>
<li>
<p>
issue 307    Set proper LDAP defaults for Active Directory
</p>
<div class="paragraph"><p>ActiveDirectory is now better supported out of the box.  Defaults
for the LDAP configuration settings are automatically guessed at
startup based upon the type of server configured in ldap.server.
Recursive groups (group which is a member of a group) is also
now supported when using an ActiveDirectory server.  Other LDAP
servers (e.g. OpenLDAP) probably don&#8217;t support this.</p></div>
</li>
<li>
<p>
"250-AUTH " will be returned if <em>AUTH</em> response does &#8230;
</p>
</li>
<li>
<p>
Fix: Authentication fail when authTypes is empty
</p>
</li>
<li>
<p>
Fix a typo that broke the gerrit build
</p>
<div class="paragraph"><p>Outgoing SMTP sometimes failed to authenticate against a
SMTP server due to slightly incorrect handling of the AUTH
advertisement.</p></div>
</li>
<li>
<p>
Correct scp commands in documentation to include -p
</p>
<div class="paragraph"><p>Our documentation of how to copy the commit-msg hook down via
scp did not include the -p option, which is necessary to make
the client preserve the executable flag on the hook script.</p></div>
</li>
<li>
<p>
issue 291    Suggest latin1 charset for MySQL databases
</p>
<div class="paragraph"><p>Documentation was updated to encourage using latin1 for MySQL
as MySQL fails with key too long errors during schema creation
when the database is using the UTF-8 character set.</p></div>
</li>
<li>
<p>
issue 294    Fix OpenID self registration dialog
</p>
<div class="paragraph"><p>OpenID <em>Register</em> hyperlink was broken due to the dialog having
no content added to it before display.  This bug was fixed by
using the proper OpenID login dialog.</p></div>
</li>
<li>
<p>
issue 309    Clear message on publish comments screen after submit&#8230;
</p>
<div class="paragraph"><p>The publish comments button preserved your last comment, making
it easy for a user to accidentally publish the same message on
the same change twice.  The message is now cleared after it has
been successfully sent.</p></div>
</li>
<li>
<p>
issue 299    Remove the branches table from the database
</p>
</li>
<li>
<p>
Display current branch SHA-1 in Branches tab
</p>
</li>
<li>
<p>
issue 299    Display not-yet-born HEAD branch in Branches tab
</p>
<div class="paragraph"><p>The not-yet-born branch in an empty project is now shown in the
Branches tab.  (This is based on the value of the HEAD symbolic
reference within the project&#8217;s Git repository.)
The branches table was removed from the database.  We now fully
rely upon the Git repository to determine which branches exist
and thus permit changes to be uploaded to.</p></div>
</li>
<li>
<p>
issue 296    Make help more friendly over SSH
</p>
<div class="paragraph"><p><tt>ssh -p 29418 localhost help</tt> is now more user friendly.</p></div>
</li>
<li>
<p>
Don&#8217;t request registration if the account exists
</p>
</li>
<li>
<p>
issue 38     Fix OpenID delegate authentication
</p>
<div class="paragraph"><p>OpenID authentication was sometimes asking providers for
registation data when we already had it on hand, fixed.
OpenID delegate identities were being stored rather than claimed
identities when the claimed identity is just a delegate to the
delegate provider.  We now store both in the account.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_fixes_in_2_0_24_1">Fixes in 2.0.24.1</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Fix unused import in OpenIdServiceImpl
</p>
</li>
<li>
<p>
dev-readme: Fix formatting of initdb command
</p>
<div class="paragraph"><p>Minor documentation/code fixes with no impact on execution.</p></div>
</li>
<li>
<p>
Fix LDAP account lookup when user not in group
</p>
<div class="paragraph"><p>Fixes a NullPointerException when a user is not in any group
and the underlying LDAP server is ActiveDirectory.</p></div>
</li>
<li>
<p>
issue 315    Correct sendemail.smtppass
</p>
<div class="paragraph"><p>Fixes sendemail configuration to use the documented smtppass
variable and not the undocumented smtpuserpass variable.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_fixes_in_2_0_24_2">Fixes in 2.0.24.2</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Fix CreateSchema to create Administrators group
</p>
</li>
<li>
<p>
Fix CreateSchema to set type of Registered Users group
</p>
</li>
<li>
<p>
Default AccountGroup instances to type INTERNAL
</p>
</li>
<li>
<p>
Document the various AccountGroup.Type states better
</p>
<div class="paragraph"><p>CreateSchema was broken in 2.0.24 and 2.0.24.1 due to the default
groups being misconfigured during insertion.  Fixed.</p></div>
</li>
<li>
<p>
Grant anonymous uses READ +1, registered users READ +&#8230;
</p>
<div class="paragraph"><p>Default permissions were a bit confusing, there is no point in an
anonymous user having READ +2.</p></div>
</li>
<li>
<p>
Use the H2 database for unit tests
</p>
</li>
<li>
<p>
Unit test for SystemConfigProvider and CreateSchema
</p>
<div class="paragraph"><p>Added unit tests to validate CreateSchema works properly, so we
don&#8217;t have a repeat of breakage here.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_other_changes">Other Changes</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Start 2.0.24 development
</p>
</li>
<li>
<p>
Merge change Ie16b8ca2
</p>
</li>
<li>
<p>
Switch to the new org.eclipse.jgit package
</p>
</li>
<li>
<p>
Allow default of $JETTY_HOME in to_jetty.sh
</p>
</li>
<li>
<p>
LdapRealm: Remove unused throws declaration
</p>
</li>
<li>
<p>
LdapRealm: Fix missing type parameter warnings
</p>
</li>
<li>
<p>
Remove dead exists method from AccountManager
</p>
</li>
<li>
<p>
Document ldap.groupPattern
</p>
</li>
<li>
<p>
AuthSMTPClient: Fix formatting errors
</p>
</li>
<li>
<p>
style fixup: remote trailing whitespace from our sour&#8230;
</p>
</li>
<li>
<p>
show-caches: Correct example output in documentation
</p>
</li>
<li>
<p>
Move server programs section under User Guide
</p>
</li>
<li>
<p>
Revert "Remove dead exists method from AccountManager"
</p>
</li>
<li>
<p>
Ensure prior commit body is parsed before comparing m&#8230;
</p>
</li>
<li>
<p>
Gerrit 2.0.24
</p>
</li>
</ul></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Version 2.0.24 (from v2.4.2-686-gfa084bb)<br />
Last updated 2013-07-23 12:07:01 PDT
</div>
</div>
</body>
</html>
